1 Background

  1. Produced as a consequence of the variability in the expression levels of the RNA Binding Proteins (RBPs) responsible for recognising the starting and ending position of each intron.
  2. Not detectable in higher quantities using RNA-seq data, as the NMD machinery might have already acted to remove the most deleterious versions of the noise.

For test whether these two hypotheses are true, we would like to obtain two heatmaps representing:

  1. The levels of expression of a set of splicesomal RBPs across the tissues. Ideally, this heatmap will display changing colours across the different tissues, evidencing expression differences of each RBP in each body site.
  2. The levels of expression of a set of genes forming the NMD machinery. Ideally, this heatmap will also display different colours across the different tissues, which will evidence that the NMD machinery works at different rates across the tissues.

2 Methods

To measure the level of expression of the spliceosomal RBPs and the NMD machinery across the samples of each GTEx v8 tissue, I have followed the method below:

  1. Obtain the spliceosomal RBPs made available by Van Nostrand et al.: In 2020 Van Nostrand et al. published a study reporting the results of studying the functions of 356 human RBPs using integrative approaches consisting of 5 assays (eCLIP, RNA Bind-N-Seq, Immunofluorescence, Knockdown RNA-seq, RBP ChIP-Seq) that focused on different aspects of RBP activity. A Large-Scale Binding and Functional Map of Human RNA Binding Proteins.
  2. Obtain the genes forming the NMD machinery from the REACTOME ontology ([R-HSA-927802]NMDv3.7Browserv82).
  3. Calculate the TPM levels of each gene from the two lists above by using the function ‘recount::getTPM(rse)’. Before using this function, the raw counts were previously transformed using the function ‘recount3::transform_counts(rse)’. The TPM values provided have not been covariate corrected.
  4. Obtain the covariates of interest per sample. Some of them were categorical, so they where transformed into numerical values, and corresponded to: age, center, gebtch, gebtchd, nabtc, nabtchd, nabtcht, hhrdy, sex, rin. These covariates were chosen by following Fairbrother-Browne, A. et.al method’s approach.

3 Code used

3.1 Reproducible Code

library(tidyverse)
library(GenomicRanges)
library(DESeq2)
library(SummarizedExperiment)
library(biomaRt)

## source("/home/sruiz/PROJECTS/splicing-project-recount3/pipeline4-3_RBP_expression.R")


## Load reference GTF and get only the genes
ensembl105 <- biomaRt::useEnsembl(biomart = 'genes', 
                                  dataset = 'hsapiens_gene_ensembl',
                                  version = 105)

################################
## FUNCTIONS       
################################

get_genes_to_analyse_expression <- function(type) {
  
  if (type == "RBP") {
    
    ## Load the RBPs and add the ensemblID
    all_RBPs <- xlsx::read.xlsx(file = './RBPs.xlsx', 
                                sep = '\t', header = TRUE,
                                sheetIndex = 1) %>%  as_tibble() 
    
    ## Tidy them
    genes_annotated <- biomaRt::getBM(
      attributes = c('ensembl_gene_id', 'hgnc_symbol'), 
      filters = 'hgnc_symbol',
      values = all_RBPs$name %>% na.omit() %>% unique(),
      mart = ensembl105
    )
    genes_annotated <- genes_annotated %>%
      distinct(hgnc_symbol, .keep_all = T)
    
    
  } else {
    
    ## Load the NMD molecules
    all_NMD <- read.delim(file = './NMD.txt',
                          sep = '\t', header = TRUE) %>% as_tibble() %>% 
      dplyr::select(hgnc_symbol = Name) %>%
      distinct(hgnc_symbol)
    
    ## Tidy them
    genes_annotated <- biomaRt::getBM(
      attributes = c('ensembl_gene_id', 'hgnc_symbol'), 
      filters = 'hgnc_symbol',
      values = all_NMD$hgnc_symbol %>% na.omit() %>% unique(),
      mart = ensembl105
    )
    genes_annotated <- genes_annotated %>%
      distinct(hgnc_symbol, .keep_all = T)
  }
  
  return(genes_annotated)
}

get_GTEx_gene_expression <- function(rse, ensembl, recount3 = T) {
  
  
  ################################################
  ## Compute TPM values using recount3 approach
  ################################################
  
  SummarizedExperiment::assays(rse)$TPM <- recount::getTPM(rse)
  ## Should all be equal to 1
  indx <- which(colSums(SummarizedExperiment::assay(rse, "TPM")) / 1e6 > 1) 
  
  any(SummarizedExperiment::assays(rse)$TPM[-(indx %>% unlist %>% unname),]/ 1e6 > 1)
  
  ## Tidy the dataframe
  recount_dds_tpm <- SummarizedExperiment::assays(rse)$TPM[-(indx %>% unlist %>% unname),] %>%
    as_tibble(rownames = "gene") %>% 
    mutate(gene = gene %>% str_remove("\\..*")) %>% 
    tidyr::gather(key = sample, value = tpm, -gene)

  
  ## 1. Filter by only "USE ME" samples
  
  sample_used <- rse %>% 
    SummarizedExperiment::colData() %>%
    as_tibble() %>%
    filter(gtex.smafrze != "EXCLUDE") %>%
    pull(external_id)

  
  recount_dds_tpm <- recount_dds_tpm %>% 
    filter(sample %in% sample_used) 

  ## 2. Add gene name
  
  mapping <- biomaRt::getBM(
    attributes = c('ensembl_gene_id', 'hgnc_symbol'), 
    filters = 'ensembl_gene_id',
    values = recount_dds_tpm$gene %>% unique,
    mart = ensembl
  )
  
  df_return <- recount_dds_tpm %>% 
    mutate(project = project_id) %>%
    dplyr::left_join(mapping,
                     by =  c("gene" = "ensembl_gene_id"))
  
  ## 3. Return recount3 TPM counts
  
  return(df_return)
  
}

tidy_sample_metadata <- function(rse, samples) {
  
  sample_metadata <- rse %>% 
    SummarizedExperiment::colData() %>%
    as_tibble() %>%
    filter(gtex.smafrze != "EXCLUDE",
           external_id %in% samples)
  
  age_numeric <- as.numeric(factor(as.matrix(sample_metadata$gtex.age))) 
  sample_metadata$gtex.age <- age_numeric
 
  sample_metadata <- sample_metadata %>%
    tibble::column_to_rownames(var = "external_id")
  
  covariates <- c("gtex.age", "gtex.smcenter", "gtex.smtsd",
                  "gtex.smgebtch", "gtex.smgebtchd",
                  "gtex.smnabtch", "gtex.smnabtchd", "gtex.smnabtcht",
                  "gtex.dthhrdy", "gtex.sex", "gtex.smrin")
  
  
  smcenter <- as.numeric(factor(as.matrix(sample_metadata$gtex.smcenter))) 
  sample_metadata$gtex.smcenter <- smcenter
  
  gtex.smgebtch <- as.numeric(factor(as.matrix(sample_metadata$gtex.smgebtch))) 
  sample_metadata$gtex.smgebtch <- gtex.smgebtch
  
  gtex.smgebtchd <- as.numeric(factor(as.matrix(sample_metadata$gtex.smgebtchd))) 
  sample_metadata$gtex.smgebtchd <- gtex.smgebtchd
  
  gtex.smnabtch <- as.numeric(factor(as.matrix(sample_metadata$gtex.smnabtch))) 
  sample_metadata$gtex.smnabtch <- gtex.smnabtch
  
  gtex.smnabtchd <- as.numeric(factor(as.matrix(sample_metadata$gtex.smnabtchd))) 
  sample_metadata$gtex.smnabtchd <- gtex.smnabtchd
  
  gtex.smnabtcht <- as.numeric(factor(as.matrix(sample_metadata$gtex.smnabtcht))) 
  sample_metadata$gtex.smnabtcht <- gtex.smnabtcht
  
  gtex.smtsd <- as.numeric(factor(as.matrix(sample_metadata$gtex.smtsd))) 
  sample_metadata$gtex.smtsd <- gtex.smtsd
  
  
  # 8. Return covariates ---------------------------
  
  return(t(sample_metadata %>%
           dplyr::select(all_of(covariates))))
}


################################################################################
# 0. Prepare the necessary data ------------------------------------------------
################################################################################


projects_used <- readRDS(file = "./all_projects_used.rds")

for (project_id in projects_used) {
  
  # project_id <- projects_used[20]
  
  ## Load the recount3 data
  rse <- recount3::create_rse_manual(
    project = project_id,
    project_home = "data_sources/gtex",
    organism = "human",
    annotation = "gencode_v29",
    type = "gene")
  
  
  ## Transform counts
  SummarizedExperiment::assays(rse)$counts <- recount3::transform_counts(rse)
  
  ## See that now we have two assayNames()
  SummarizedExperiment::assayNames(rse)
  
  ## Get metadata
  metadata <- rse %>% 
    SummarizedExperiment::colData() %>%
    as_tibble() %>%
    filter(gtex.smrin >= 6.0,
           gtex.smafrze != "EXCLUDE") 
  
  ## Get cluster names from the current project
  clusterIDs <- metadata$gtex.smtsd %>% unique()
  
  for (cluster in clusterIDs) {
    
    
    # cluster <-  clusterIDs[1]
    
    cluster_metadata <- metadata %>%
      filter(gtex.smtsd == cluster)
    
    ################################################################################
    # 1. Get the TPM expression using GTEX data --------------------------------
    ################################################################################
    
    dds_tpm <- get_GTEx_gene_expression(rse = rse, ensembl = ensembl105)
    dds_tpm <- dds_tpm %>% filter(tpm > 0)
    
    for (type in c("RBP", "NMD")) {
      
      print(paste0(Sys.time(), " - ", cluster, "...", type))
      
      genes <- get_genes_to_analyse_expression(type)
      
      # Tidy the 'dds_tpm' object
      dds_tpm_pv <- dds_tpm %>%
        dplyr::filter(gene %in% genes$ensembl_gene_id) %>%
        dplyr::select(gene, sample, tpm) %>%
        filter(sample %in% cluster_metadata$external_id) %>%
        group_by(gene) %>%
        distinct(sample, .keep_all = T) %>%
        pivot_wider(names_from = sample, values_from = tpm, values_fill = 0)
      
      ## Save data
      folder_name <- paste0("./", type, "/", cluster, "/")
      dir.create(file.path(folder_name), recursive = TRUE, showWarnings = T)
      
      write.csv(x = dds_tpm_pv %>% tibble::column_to_rownames("gene"),
                file = paste0(folder_name, "/tpm_ensembl105.csv"))
      
      ################################################################################
      # 2. Get the covariates to correct for -----------------------------------------
      ################################################################################
      
      sample_metadata <- tidy_sample_metadata(rse, samples = cluster_metadata$external_id)
      
      
      write_csv(x = sample_metadata %>% as_tibble(rownames = "covariates"), 
                file = paste0(folder_name, "/covariates.csv"))
      
      if (!identical(names(sample_metadata %>% as_tibble(rownames = "covariates"))[-1] %>% sort(), 
                     names(dds_tpm_pv %>% tibble::column_to_rownames("gene")) %>% sort())) {
        print("ERROR! Covariates and gene expression have different sample IDs associated.")
        break;
      }
      
    }
  
  }
  
  rm(rse)
  rm(dds_tpm)
  rm(dds_tpm_pv)
  rm(sample_metadata)
  gc()
  
}

4 Results

Below are plots that visualise the cross-tissue variation in (uncorrected) TPM for NMD genes and RBP genes across 42 GTEx tissues.

4.1 NMDs (med. TPM, var, sd, med. TPM log2fc)

source("./R/01-wrangle_and_plot.R")

# NMDs
read_delim("./NMD.txt", delim="\t", col_names=T)$Name %>% 
  ensembldb::select(EnsDb.Hsapiens.v79, keys=., keytype = "SYMBOL", columns = c("SYMBOL","GENEID")) %>% 
  wrangle.data.gen.heatmap(
    gene.list=.,
    data.path="./data/NMD",
    fig.file="NMD_plot",
    txt.size=7.5
  )
\label{fig:NMDs} Figure to show how NMD genes vary across GTEx tissues. A. Heatmap to show median TPM. B. Boxplots to show distributions of cross-tissue standard deviations. C. Boxplots to show distributions of cross-tissue variances. D. Heatmap to show, for each gene, and each tissue, log10(fold-change) expression with respect to the median tissue (for the gene).

Figure 4.1: Figure to show how NMD genes vary across GTEx tissues. A. Heatmap to show median TPM. B. Boxplots to show distributions of cross-tissue standard deviations. C. Boxplots to show distributions of cross-tissue variances. D. Heatmap to show, for each gene, and each tissue, log10(fold-change) expression with respect to the median tissue (for the gene).

4.2 RBPs (med. TPM, var, sd, med. TPM log2fc)

source("./R/01-wrangle_and_plot.R")

# RBPs
read_delim("./RBPs_yellow_highlight.txt", delim="\t", col_names=F)$X1 %>% 
  ensembldb::select(EnsDb.Hsapiens.v79, keys=., keytype = "GENEID", columns = c("SYMBOL","GENEID")) %>% 
wrangle.data.gen.heatmap(
  gene.list=.,
  data.path="./data/RBP",
  fig.file="RBP_plot", 
  txt.size=7.5
)
\label{fig:RBPs} Figure to show how RBP genes vary across GTEx tissues. A. Heatmap to show median TPM. B. Boxplots to show distributions of cross-tissue standard deviations. C. Boxplots to show distributions of cross-tissue variances. D. Heatmap to show, for each gene, and each tissue, log2(fold-change) expression with respect to the median tissue (for the gene).

Figure 4.2: Figure to show how RBP genes vary across GTEx tissues. A. Heatmap to show median TPM. B. Boxplots to show distributions of cross-tissue standard deviations. C. Boxplots to show distributions of cross-tissue variances. D. Heatmap to show, for each gene, and each tissue, log2(fold-change) expression with respect to the median tissue (for the gene).

4.3 NMDs with gene subgroups (med. TPM)

source("./R/02-add_RBP_gene_subgroups.R")

wrangle.data.gen.heatmap.avgTPM(
  data.path="./data/RBP/",
  rbp.subgroup.xlsx="./RBPs_subgroups.xlsx",
  txt.size=5.5
)
\label{fig:RBPs_subgroups_tpm} Heatmap to show median TPM.

(#fig:RBPs_subgroups_tpm) Heatmap to show median TPM.

4.4 NMDs with gene subgroups (med. TPM log2fc)

source("./R/02-add_RBP_gene_subgroups.R")

wrangle.data.gen.heatmap.lfc(
  data.path="./data/RBP/",
  rbp.subgroup.xlsx="./RBPs_subgroups.xlsx",
  txt.size=5.5
)
\label{fig:RBPs_subgroups_lfc} Heatmap to show, for each gene, and each tissue, log2(fold-change) expression with respect to the median tissue (for the gene).

(#fig:RBPs_subgroups_lfc) Heatmap to show, for each gene, and each tissue, log2(fold-change) expression with respect to the median tissue (for the gene).

5 Session info

Show/hide
## ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.0.3 (2020-10-10)
##  os       macOS Big Sur 10.16
##  system   x86_64, darwin17.0
##  ui       X11
##  language (EN)
##  collate  en_GB.UTF-8
##  ctype    en_GB.UTF-8
##  tz       Europe/London
##  date     2022-11-24
##  pandoc   2.18 @ /Applications/RStudio.app/Contents/MacOS/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
##  package              * version   date (UTC) lib source
##  AnnotationDbi        * 1.52.0    2020-10-27 [1] Bioconductor
##  AnnotationFilter     * 1.14.0    2020-10-27 [1] Bioconductor
##  askpass                1.1       2019-01-13 [1] CRAN (R 4.0.2)
##  assertthat             0.2.1     2019-03-21 [1] CRAN (R 4.0.2)
##  backports              1.4.1     2021-12-13 [1] CRAN (R 4.0.2)
##  Biobase              * 2.50.0    2020-10-27 [1] Bioconductor
##  BiocFileCache          1.14.0    2020-10-27 [1] Bioconductor
##  BiocGenerics         * 0.36.1    2021-04-16 [1] Bioconductor
##  BiocParallel           1.24.1    2020-11-06 [1] Bioconductor
##  biomaRt                2.46.3    2021-02-11 [1] Bioconductor
##  Biostrings             2.58.0    2020-10-27 [1] Bioconductor
##  bit                    4.0.4     2020-08-04 [1] CRAN (R 4.0.2)
##  bit64                  4.0.5     2020-08-30 [1] CRAN (R 4.0.2)
##  bitops                 1.0-7     2021-04-24 [1] CRAN (R 4.0.2)
##  blob                   1.2.3     2022-04-10 [1] CRAN (R 4.0.3)
##  bookdown               0.28      2022-08-09 [1] CRAN (R 4.0.3)
##  broom                  1.0.1     2022-08-29 [1] CRAN (R 4.0.3)
##  bslib                  0.4.0     2022-07-16 [1] CRAN (R 4.0.3)
##  cachem                 1.0.6     2021-08-19 [1] CRAN (R 4.0.2)
##  cellranger             1.1.0     2016-07-27 [1] CRAN (R 4.0.2)
##  cli                    3.3.0     2022-04-25 [1] CRAN (R 4.0.3)
##  colorspace             2.0-3     2022-02-21 [1] CRAN (R 4.0.5)
##  crayon                 1.5.1     2022-03-26 [1] CRAN (R 4.0.5)
##  curl                   4.3.2     2021-06-23 [1] CRAN (R 4.0.2)
##  data.table           * 1.14.2    2021-09-27 [1] CRAN (R 4.0.2)
##  DBI                    1.1.3     2022-06-18 [1] CRAN (R 4.0.3)
##  dbplyr                 2.2.1     2022-06-27 [1] CRAN (R 4.0.3)
##  DelayedArray           0.16.3    2021-03-24 [1] Bioconductor
##  digest                 0.6.29    2021-12-01 [1] CRAN (R 4.0.2)
##  dplyr                * 1.0.9     2022-04-28 [1] CRAN (R 4.0.3)
##  ellipsis               0.3.2     2021-04-29 [1] CRAN (R 4.0.2)
##  EnsDb.Hsapiens.v79   * 2.99.0    2022-07-13 [1] Bioconductor
##  ensembldb            * 2.14.1    2021-04-19 [1] Bioconductor
##  evaluate               0.16      2022-08-09 [1] CRAN (R 4.0.3)
##  fansi                  1.0.3     2022-03-24 [1] CRAN (R 4.0.5)
##  farver                 2.1.1     2022-07-06 [1] CRAN (R 4.0.3)
##  fastmap                1.1.0     2021-01-25 [1] CRAN (R 4.0.2)
##  forcats              * 0.5.2     2022-08-19 [1] CRAN (R 4.0.3)
##  fs                     1.5.2     2021-12-08 [1] CRAN (R 4.0.2)
##  gargle                 1.2.0     2021-07-02 [1] CRAN (R 4.0.2)
##  generics               0.1.3     2022-07-05 [1] CRAN (R 4.0.3)
##  GenomeInfoDb         * 1.26.7    2021-04-08 [1] Bioconductor
##  GenomeInfoDbData       1.2.4     2022-07-13 [1] Bioconductor
##  GenomicAlignments      1.26.0    2020-10-27 [1] Bioconductor
##  GenomicFeatures      * 1.42.3    2021-04-04 [1] Bioconductor
##  GenomicRanges        * 1.42.0    2020-10-27 [1] Bioconductor
##  ggplot2              * 3.3.6     2022-05-03 [1] CRAN (R 4.0.3)
##  ggsci                * 2.9       2018-05-14 [1] CRAN (R 4.0.2)
##  glue                   1.6.2     2022-02-24 [1] CRAN (R 4.0.5)
##  googledrive            2.0.0     2021-07-08 [1] CRAN (R 4.0.2)
##  googlesheets4          1.0.1     2022-08-13 [1] CRAN (R 4.0.3)
##  gtable                 0.3.0     2019-03-25 [1] CRAN (R 4.0.2)
##  haven                  2.5.1     2022-08-22 [1] CRAN (R 4.0.3)
##  here                 * 1.0.1     2020-12-13 [1] CRAN (R 4.0.2)
##  highr                  0.9       2021-04-16 [1] CRAN (R 4.0.2)
##  hms                    1.1.2     2022-08-19 [1] CRAN (R 4.0.3)
##  htmltools              0.5.3     2022-07-18 [1] CRAN (R 4.0.3)
##  httr                   1.4.4     2022-08-17 [1] CRAN (R 4.0.3)
##  IRanges              * 2.24.1    2020-12-12 [1] Bioconductor
##  janitor              * 2.1.0     2021-01-05 [1] CRAN (R 4.0.2)
##  jquerylib              0.1.4     2021-04-26 [1] CRAN (R 4.0.2)
##  jsonlite               1.8.0     2022-02-22 [1] CRAN (R 4.0.5)
##  knitr                  1.40      2022-08-24 [1] CRAN (R 4.0.3)
##  labeling               0.4.2     2020-10-20 [1] CRAN (R 4.0.2)
##  lattice                0.20-45   2021-09-22 [1] CRAN (R 4.0.2)
##  lazyeval               0.2.2     2019-03-15 [1] CRAN (R 4.0.2)
##  lifecycle              1.0.1     2021-09-24 [1] CRAN (R 4.0.2)
##  lubridate              1.8.0     2021-10-07 [1] CRAN (R 4.0.2)
##  magrittr             * 2.0.3     2022-03-30 [1] CRAN (R 4.0.5)
##  Matrix                 1.4-1     2022-03-23 [1] CRAN (R 4.0.5)
##  MatrixGenerics         1.2.1     2021-01-30 [1] Bioconductor
##  matrixStats            0.62.0    2022-04-19 [1] CRAN (R 4.0.3)
##  memoise                2.0.1     2021-11-26 [1] CRAN (R 4.0.2)
##  modelr                 0.1.9     2022-08-19 [1] CRAN (R 4.0.3)
##  munsell                0.5.0     2018-06-12 [1] CRAN (R 4.0.2)
##  openssl                2.0.2     2022-05-24 [1] CRAN (R 4.0.3)
##  patchwork            * 1.1.2     2022-08-19 [1] CRAN (R 4.0.3)
##  pillar                 1.8.1     2022-08-19 [1] CRAN (R 4.0.3)
##  pkgconfig              2.0.3     2019-09-22 [1] CRAN (R 4.0.2)
##  prettyunits            1.1.1     2020-01-24 [1] CRAN (R 4.0.2)
##  progress               1.2.2     2019-05-16 [1] CRAN (R 4.0.2)
##  ProtGenerics           1.22.0    2020-10-27 [1] Bioconductor
##  purrr                * 0.3.4     2020-04-17 [1] CRAN (R 4.0.2)
##  R6                     2.5.1     2021-08-19 [1] CRAN (R 4.0.2)
##  rappdirs               0.3.3     2021-01-31 [1] CRAN (R 4.0.2)
##  RColorBrewer         * 1.1-3     2022-04-03 [1] CRAN (R 4.0.5)
##  Rcpp                   1.0.9     2022-07-08 [1] CRAN (R 4.0.3)
##  RCurl                  1.98-1.8  2022-07-30 [1] CRAN (R 4.0.3)
##  readr                * 2.1.2     2022-01-30 [1] CRAN (R 4.0.5)
##  readxl               * 1.4.1     2022-08-17 [1] CRAN (R 4.0.3)
##  reprex                 2.0.2     2022-08-17 [1] CRAN (R 4.0.3)
##  rlang                  1.0.5     2022-08-31 [1] CRAN (R 4.0.3)
##  rmarkdown              2.16      2022-08-24 [1] CRAN (R 4.0.3)
##  rprojroot              2.0.3     2022-04-02 [1] CRAN (R 4.0.5)
##  Rsamtools              2.6.0     2020-10-27 [1] Bioconductor
##  RSQLite                2.2.16    2022-08-17 [1] CRAN (R 4.0.3)
##  rstudioapi             0.14      2022-08-22 [1] CRAN (R 4.0.3)
##  rtracklayer            1.50.0    2020-10-27 [1] Bioconductor
##  rvest                  1.0.3     2022-08-19 [1] CRAN (R 4.0.3)
##  S4Vectors            * 0.28.1    2020-12-09 [1] Bioconductor
##  sass                   0.4.2     2022-07-16 [1] CRAN (R 4.0.3)
##  scales                 1.2.1     2022-08-20 [1] CRAN (R 4.0.3)
##  sessioninfo          * 1.2.2     2021-12-06 [1] CRAN (R 4.0.2)
##  snakecase              0.11.0    2019-05-25 [1] CRAN (R 4.0.2)
##  stringi                1.7.8     2022-07-11 [1] CRAN (R 4.0.3)
##  stringr              * 1.4.1     2022-08-20 [1] CRAN (R 4.0.3)
##  SummarizedExperiment   1.20.0    2020-10-27 [1] Bioconductor
##  tibble               * 3.1.8     2022-07-22 [1] CRAN (R 4.0.3)
##  tidyr                * 1.2.0     2022-02-01 [1] CRAN (R 4.0.5)
##  tidyselect             1.1.2     2022-02-21 [1] CRAN (R 4.0.5)
##  tidyverse            * 1.3.2     2022-07-18 [1] CRAN (R 4.0.3)
##  tzdb                   0.3.0     2022-03-28 [1] CRAN (R 4.0.5)
##  utf8                   1.2.2     2021-07-24 [1] CRAN (R 4.0.2)
##  vctrs                  0.4.1     2022-04-13 [1] CRAN (R 4.0.3)
##  vroom                  1.5.7     2021-11-30 [1] CRAN (R 4.0.2)
##  withr                  2.5.0     2022-03-03 [1] CRAN (R 4.0.5)
##  xfun                   0.32      2022-08-10 [1] CRAN (R 4.0.3)
##  XML                    3.99-0.10 2022-06-09 [1] CRAN (R 4.0.3)
##  xml2                   1.3.3     2021-11-30 [1] CRAN (R 4.0.2)
##  XVector                0.30.0    2020-10-28 [1] Bioconductor
##  yaml                   2.3.5     2022-02-21 [1] CRAN (R 4.0.5)
##  zlibbioc               1.36.0    2020-10-28 [1] Bioconductor
## 
##  [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library
## 
## ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────